This data report uses two different datasets to estimate the greenhouse gas emissions of the Hampshire County under three different definitions:
For the avoidance of doubt the Hampshire County is taken to mean all local authority districts in the Hampshire County including the unitary authorities of Portsmouth, Southampton and the Isle of Wight.
# BEIS LA co2 data
beis_la_co2_DT <- data.table::fread(paste0(params$dataPath,
"beis/localAuthorityCarbon/", "2005-19_Local_Authority_CO2_emissions.csv"))
beis_la_co2_DT[, subSectorLabel := `LA CO2 Sub-sector`]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Agriculture",
"Industry: Agriculture",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Large Industrial Installations",
"Industry: Large Industrial Installations",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (A roads)",
"Transport: (A roads)",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (Minor roads)",
"Transport: (Minor roads)",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Road Transport (Motorways)",
"Transport: (Motorways)",
subSectorLabel)
]
beis_la_co2_DT[, subSectorLabel := ifelse(subSectorLabel == "Diesel Railways",
"Transport: Diesel Railways",
subSectorLabel)
]
beis_la_co2_DT[, la_name := `Local Authority`]
# set up the colours
# colours borrowed from https://git.soton.ac.uk/twr1m15/la_emissions_viz/-/blob/master/shiny/app.R
# for details, use set for each sector
industry_pal <- RColorBrewer::brewer.pal(n = 8, name = "Greys")[4:8] # industry greys, 5 categories incl Agric
commercial_pal <- RColorBrewer::brewer.pal(n = 8, name = "RdPu")[4:6] # commercial greys, 3 categories
domestic_pal <- RColorBrewer::brewer.pal(n = 4, name = "Blues")[2:4] # domestic blues, 3 categories
public_pal <- RColorBrewer::brewer.pal(n = 4, name = "Purples")[2:4] # public purple, 3 categories
transport_pal <- RColorBrewer::brewer.pal(n = 6, name = "Oranges")[2:6] # transport oranges, 5 categories
lulucf_pal <- RColorBrewer::brewer.pal(n = 9, name = "Greens")[4:9] # lulucf greens, 6 categories
# for details, combine sets
detailed_pal <- c(commercial_pal, domestic_pal, industry_pal, lulucf_pal, public_pal, transport_pal)
beis_la_co2_DT[, subSectorLabelFact := factor(subSectorLabel)]
catList <- unique(beis_la_co2_DT$subSectorLabelFact) # this is not alphabetical - why?
catList2 <- c(catList[1:15],catList[25] , catList[16:24])
names(detailed_pal) <- catList2
hampshire_beis_la_co2_DT <- getSolent(beis_la_co2_DT)
t <- hampshire_beis_la_co2_DT[, .('Number of emissions categories' = .N), keyby = .(District = la_name, Year = as.character(`Calendar Year`))]
makeFlexTable(dcast(t, District ~ Year), cap = "Data coverage for BEIS CO2 emissions data")
## Using 'Number of emissions categories' as value column. Use 'value.var' to override
District | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 |
Basingstoke and Deane | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
East Hampshire | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 22 | 22 | 22 | 22 | 22 |
Eastleigh | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
Fareham | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
Gosport | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 |
Hart | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 24 | 24 | 24 |
Havant | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 |
Isle of Wight | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 |
New Forest | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
Portsmouth | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
Rushmoor | 23 | 23 | 23 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 |
Southampton | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
Test Valley | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
Winchester | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
Table 2.1 shows the numnber of emissions categories for each district over time. Where this value is less than 24 this implies some categories had no emissions for this district.
# CSE impact tool data
cse_territorial_abs_DT <- data.table::fread(paste0(params$dataPath,
"cse/cse_ImpactTool/", "local-authority-all-territorial-absolute.csv.gz"))
cse_territorial_abs_DT[, la_name := name]
hampshire_cse_territorial_abs_DT <- getSolent(cse_territorial_abs_DT)
# make long form for easy summary etc
hampshire_cse_territorial_abs_DT <- melt(hampshire_cse_territorial_abs_DT)
## Warning in melt.data.table(hampshire_cse_territorial_abs_DT): id.vars and
## measure.vars are internally guessed when both are 'NULL'. All non-numeric/
## integer/logical type columns are considered id.vars, which in this case are
## columns [id, name, la_name, ...]. Consider providing at least one of 'id' or
## 'measure' vars in future.
t <- hampshire_cse_territorial_abs_DT[, .('Number of emissions categories' = .N), keyby = .(District = la_name)]
makeFlexTable(t, cap = "Data coverage for CSE territorial emissions data")
District | Number of emissions categories |
Basingstoke and Deane | 21 |
East Hampshire | 21 |
Eastleigh | 21 |
Fareham | 21 |
Gosport | 21 |
Hart | 21 |
Havant | 21 |
Isle of Wight | 21 |
New Forest | 21 |
Portsmouth | 21 |
Rushmoor | 21 |
Southampton | 21 |
Test Valley | 21 |
Winchester | 21 |
cse_consumption_abs_DT <- data.table::fread(paste0(params$dataPath,
"cse/cse_ImpactTool/", "local-authority-all-consumption-absolute.csv.gz"))
cse_consumption_abs_DT[, la_name := name]
hampshire_cse_consumption_abs_DT <- getSolent(cse_consumption_abs_DT)
# make long form for easy summary etc
hampshire_cse_consumption_abs_DT <- melt(hampshire_cse_consumption_abs_DT)
## Warning in melt.data.table(hampshire_cse_consumption_abs_DT): id.vars and
## measure.vars are internally guessed when both are 'NULL'. All non-numeric/
## integer/logical type columns are considered id.vars, which in this case are
## columns [id, name, la_name, ...]. Consider providing at least one of 'id' or
## 'measure' vars in future.
t <- hampshire_cse_consumption_abs_DT[, .('Number of emissions categories' = .N), keyby = .(District = la_name)]
makeFlexTable(t, cap = "Data coverage for CSE consumptions emissions data")
District | Number of emissions categories |
Basingstoke and Deane | 15 |
East Hampshire | 15 |
Eastleigh | 15 |
Fareham | 15 |
Gosport | 15 |
Hart | 15 |
Havant | 15 |
Isle of Wight | 15 |
New Forest | 15 |
Portsmouth | 15 |
Rushmoor | 15 |
Southampton | 15 |
Test Valley | 15 |
Winchester | 15 |
These are calculated under the territorial emissions method and include only CO2 emissions.
Table 3.1 shows the total emissions for 2019.
t <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`Total kT CO2e` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE))]
makeFlexTable(t, cap = "BEIS CO2 emissions (kT, Hampshire, 2019)")
Total kT CO2e |
8,421.4 |
sumBEIS_kt <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019]$`Territorial emissions (kt CO2)`)
Table 3.2 shows the total emissions for 2019 by category. Figure 3.1 shows the data as a bar plot. The categroies have been colour-coded so that related categories have similar colours in the palette. The largest emissions sources under this method are clearly visible (domestic gas and transport).
t <- hampshire_beis_la_co2_DT[`Calendar Year` == 2019, .(`Total kT CO2` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE)), keyby = .(subSectorLabelFact)]
absTotal <- sum(hampshire_beis_la_co2_DT[`Calendar Year` == 2019, abs(`Territorial emissions (kt CO2)`)])
t[, `% of gross` := 100*(`Total kT CO2`/absTotal)]
makeFlexTable(t, cap = "BEIS CO2 emissions by category (Hampshire, 2019)")
subSectorLabelFact | Total kT CO2 | % of gross |
Commercial 'Other Fuels' | 10.7 | 0.1 |
Commercial Electricity | 504.6 | 5.2 |
Commercial Gas | 310.1 | 3.2 |
Domestic 'Other Fuels' | 239.4 | 2.4 |
Domestic Electricity | 689.2 | 7.0 |
Domestic Gas | 1,716.0 | 17.5 |
Industry 'Other Fuels' | 419.1 | 4.3 |
Industry Electricity | 326.5 | 3.3 |
Industry Gas | 167.1 | 1.7 |
Industry: Agriculture | 108.6 | 1.1 |
Industry: Large Industrial Installations | 118.9 | 1.2 |
LULUCF Net Emissions: Cropland | 138.4 | 1.4 |
LULUCF Net Emissions: Forest land | -484.3 | -5.0 |
LULUCF Net Emissions: Grassland | -194.5 | -2.0 |
LULUCF Net Emissions: Settlements | 124.2 | 1.3 |
LULUCF Net Emissions: Wetlands | -0.3 | -0.0 |
Public Sector 'Other Fuels' | 4.1 | 0.0 |
Public Sector Electricity | 122.0 | 1.2 |
Public Sector Gas | 188.8 | 1.9 |
Transport Other | 32.1 | 0.3 |
Transport: (A roads) | 1,443.0 | 14.8 |
Transport: (Minor roads) | 1,368.1 | 14.0 |
Transport: (Motorways) | 1,027.3 | 10.5 |
Transport: Diesel Railways | 42.4 | 0.4 |
ggplot2::ggplot(t, aes(x = reorder(subSectorLabelFact, -`Total kT CO2`),
y = `Total kT CO2`,
fill = subSectorLabelFact)) +
geom_col() +
scale_fill_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "LA CO2 Sub-sector") +
coord_flip()
Figure 3.1: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
# p <- ggplot2::ggplot(subsetDT, aes(x = `Calendar Year`, y = `Territorial emissions (kt CO2)`,
# fill = subSectorLabel,
# colour = subSectorLabel)) +
# geom_col(position = "stack") +
# scale_colour_manual(values = detailed_pal) +
# scale_fill_manual(values = detailed_pal) #
# p
Figure 3.2 shows trends over time for these categories.
t <- hampshire_beis_la_co2_DT[, .(`Total kT CO2e` = sum(`Territorial emissions (kt CO2)`, na.rm = TRUE)), keyby = .(`Calendar Year`, subSectorLabelFact)]
ggplot2::ggplot(t, aes(x = `Calendar Year`,
y = `Total kT CO2e`,
fill = subSectorLabelFact)) +
geom_col(position = "stack") +
scale_fill_manual(values = detailed_pal) +
theme(legend.position = "bottom", ) +
guides(fill=guide_legend(ncol=3)) +
theme(legend.title = element_blank()) +
labs(x = "LA CO2 Sub-sector")
Figure 3.2: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
Figure 3.3 shows trends over time for these categories using a line plot to make it easier to see which categories have declined.
p <- ggplot2::ggplot(t, aes(x = `Calendar Year`,
y = `Total kT CO2e`,
colour = subSectorLabelFact)) +
geom_line() +
scale_colour_manual(values = detailed_pal) +
theme(legend.position = "bottom", ) +
guides(colour=guide_legend(ncol=3)) +
theme(legend.title = element_blank()) +
labs(x = "LA CO2 Sub-sector")
p
Figure 3.3: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
Figure 3.4 shows the same plot using plotly so that you can hover over the lines. This only works if the output is html and you are viewing this in a web browser…
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following objects are masked from 'package:flextable':
##
## highlight, style
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
plotly::ggplotly(p)
Figure 3.4: BEIS CO2 emissions by category (Hampshire, 2019 ordered by emissions value)
These are calculated under the territorial emissions method and include all greenhouse gas emissions.
Table 4.1 shows the total emissions for 2019.
t <- hampshire_cse_territorial_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000)]
makeFlexTable(t, cap = "CSE territorial emissions (Hampshire, 2019)")
Total kT CO2e |
14,388.9 |
sumCSETerr_kt <- sum(hampshire_cse_territorial_abs_DT$value)/1000
Table 4.2 shows the total emissions for 2019 by category. Figure 4.1 shows the data as a bar plot. The largest emissions sources under this method are clearly visible (domestic gas, transport and pwoer generation). Note that some of the categories do not exactly match those used in the BEIS data. Ignore the (t CO2e) in the label - the plot shows kT for easy comparison.
t <- hampshire_cse_territorial_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000), keyby = .(variable)]
absTotal <- sum(hampshire_cse_territorial_abs_DT[, abs(value)])/1000
t[, `% of gross` := 100*(`Total kT CO2e`/absTotal)]
makeFlexTable(t, cap = "CSE all territorial emissions by category (Hampshire, 2019)")
variable | Total kT CO2e | % of gross |
Housing - Mains gas (t CO2e) | 1,657.5 | 10.9 |
Housing - Electricity (t CO2e) | 841.3 | 5.5 |
Housing - Oil (t CO2e) | 294.0 | 1.9 |
Housing - LPG (t CO2e) | 38.0 | 0.2 |
Housing - Biomass (t CO2e) | 8.0 | 0.1 |
Housing - Coal (t CO2e) | 11.0 | 0.1 |
Industrial and commercial - Electricity (t CO2e) | 1,110.0 | 7.3 |
Industrial and commercial - Mains gas (t CO2e) | 702.5 | 4.6 |
Industrial and commercial - Other Fuels (t CO2e) | 443.4 | 2.9 |
Industrial and commercial - Large industrial consumers (t CO2e) | 81.5 | 0.5 |
Power generation (t CO2e) | 2,172.5 | 14.3 |
Agriculture - Fuel (t CO2e) | 106.7 | 0.7 |
Agriculture - Livestock and crop-related emissions (t CO2e) | 457.0 | 3.0 |
Aviation (t CO2e) | 1,202.6 | 7.9 |
Shipping (t CO2e) | 479.0 | 3.1 |
Diesel fuelled railways (t CO2e) | 45.3 | 0.3 |
F-gases (t CO2e) | 374.1 | 2.5 |
Road Transport (t CO2e) | 4,054.6 | 26.6 |
Other Transport (t CO2e) | 31.2 | 0.2 |
Waste management (t CO2e) | 703.7 | 4.6 |
Land use, land-use change, and forestry (t CO2e) | -425.2 | -2.8 |
ggplot2::ggplot(t, aes(x = reorder(variable, -`Total kT CO2e`),
y = `Total kT CO2e`,
fill = variable)) +
geom_col() +
#scale_fill_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "Emissions source") +
coord_flip()
Figure 4.1: CSE all territorial emissions by category (Hampshire, 2019 ordered by emissions value)
# p <- ggplot2::ggplot(subsetDT, aes(x = `Calendar Year`, y = `Territorial emissions (kt CO2)`,
# fill = subSectorLabel,
# colour = subSectorLabel)) +
# geom_col(position = "stack") +
# scale_colour_manual(values = detailed_pal) +
# scale_fill_manual(values = detailed_pal) #
# p
These are calculated under the consumption emissions method and include all greenhouse gas emissions.
Table 5.1 shows the total emissions for 2019.
t <- hampshire_cse_consumption_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000)]
makeFlexTable(t, cap = "CSE consumption emissions (Hampshire, 2019)")
Total kT CO2e |
13,633.3 |
sumCSECons_kt <- sum(hampshire_cse_consumption_abs_DT$value)/1000
Table 5.2 shows the total emissions for 2019 by category. Figure 5.1 shows the data as a bar plot. The largest emissions sources under this method are clearly visible (purchased goods, services and food/diet and gas-use). Note that some of the categories do not exactly match those used in the BEIS data. Ignore the (t CO2e) in the label - the plot shows kT for easy comparison.
t <- hampshire_cse_consumption_abs_DT[, .(`Total kT CO2e` = sum(value, na.rm = TRUE)/1000), keyby = .(variable)]
absTotal <- sum(hampshire_cse_consumption_abs_DT[, abs(value)])/1000
t[, `% of gross` := 100*(`Total kT CO2e`/absTotal)]
makeFlexTable(t, cap = "CSE all consumption emissions by category (Hampshire, 2019)")
variable | Total kT CO2e | % of gross |
Consumption of goods and services - Purchase of goods (t CO2e) | 2,623.4 | 19.2 |
Consumption of goods and services - Use of services (t CO2e) | 1,194.7 | 8.8 |
Consumption of goods and services - Other consumption related emissions (t CO2e) | 1,034.1 | 7.6 |
Food and diet - Meat and fish (t CO2e) | 1,722.0 | 12.6 |
Food and diet - Other food and drink (t CO2e) | 1,413.7 | 10.4 |
Housing - Mains gas (t CO2e) | 1,657.5 | 12.2 |
Housing - Electricity (t CO2e) | 841.3 | 6.2 |
Housing - Oil (t CO2e) | 294.0 | 2.2 |
Housing - LPG (t CO2e) | 38.0 | 0.3 |
Housing - Biomass (t CO2e) | 8.0 | 0.1 |
Housing - Coal (t CO2e) | 11.0 | 0.1 |
Travel - Flights (t CO2e) | 969.8 | 7.1 |
Travel - Public transport (t CO2e) | 399.2 | 2.9 |
Travel - Private transport (t CO2e) | 1,378.2 | 10.1 |
Waste - Waste (t CO2e) | 48.4 | 0.4 |
ggplot2::ggplot(t, aes(x = reorder(variable, -`Total kT CO2e`),
y = `Total kT CO2e`,
fill = variable)) +
geom_col() +
#scale_fill_manual(values = detailed_pal) +
theme(legend.position = "none") +
labs(x = "Emissions source") +
coord_flip()
Figure 5.1: CSE all territorial emissions by category (Hampshire, 2019 ordered by emissions value)
The true value of emissions for Hampshire depends how you measure it:
Which you choose to focus on depends what you want to show and what you want to achieve. The same is true of the emissions subcategories.
For strategic planning purposes the next step is to map relevant policies to the categories of emissions. Which gaps can be filled and by whom?